[アップデート] Lambda 関数のランタイムで Node.js 22 が利用可能になったので AWS CDK で設定してみた

[アップデート] Lambda 関数のランタイムで Node.js 22 が利用可能になったので AWS CDK で設定してみた

Clock Icon2024.11.23

こんにちは、製造ビジネステクノロジー部の若槻です。

最近の AWS Lambda のサービスアップデートで、Node.js 22 ランタイムが利用可能になりました。
https://dev.classmethod.jp/articles/lambda-support-nodejs22/

公式のアップデート情報はこちらです。
https://aws.amazon.com/blogs/compute/node-js-22-runtime-now-available-in-aws-lambda/

そして AWS CDK の方でも早速 Lambda L2 Construct で Node.js 22 ランタイムの利用がサポートされるリリースがあったので、実際に試してみました。

https://github.com/aws/aws-cdk/releases/tag/v2.168.0

lambda: add NodeJS 22.x support (#32104) (baa8561)

試してみた

CDK パッケージのアップデート

AWS CDK モジュールを v2.168.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest

CDK 実装

AWS CDK の Runtime クラスで Node.js 22 ランタイムが追加されており、NodejsFunction または Function で利用可能となっています。

ここでは NodejsFunction を試してみます。Runtime クラスで NODEJS_22_X を指定します。

lib/main-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as lambda_nodejs from 'aws-cdk-lib/aws-lambda-nodejs';

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    new lambda_nodejs.NodejsFunction(this, 'MyFunction', {
      runtime: lambda.Runtime.NODEJS_22_X, // Node.js 22 ランタイムを指定
    });
  }
}

ちなみに現バージョン時点では Node.js 16 以前は Deprecated となっていました。

ハンドラーに指定した Lambda 関数コードはこちらです。
lib/main-stack.MyFunction.ts
export const handler = async (): Promise<void> => {
  console.log('Hello, world!');
};

上記実装を CDK デプロイし、作成された Lambda 関数をマネジメントコンソールから確認すると、ランタイムが Node.js 22 となっていることが確認できました。

NODEJS_LATEST での指定は Node.js 18 となる

ランタイムを NODEJS_LATEST で指定した場合はどうなるでしょう。

lib/main-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as lambda_nodejs from 'aws-cdk-lib/aws-lambda-nodejs';

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    new lambda_nodejs.NodejsFunction(this, 'MyFunction', {
      runtime: lambda.Runtime.NODEJS_LATEST, // 指定を変更
    });
  }
}

CDK Diff で差分を確認すると、Node.js 18 となりました。

$ npx cdk diff Main
Bundling asset Main/MyFunction/Code/Stage...

  cdk.out/bundling-temp-c51ea79c250def6d78333ab33d9580a7f77f5eeffe7710e89195f6512585c09e/index.js  1.1kb

⚡ Done in 3ms
start: Building 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
success: Built 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
start: Publishing 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
success: Published 9c75552aaa5df261ad192d15840b3fcad826065c70d5aa2ecd3703b8d55c6f9b:XXXXXXXXXXXX-ap-northeast-1
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack Main
Resources
[~] AWS::Lambda::Function MyFunction MyFunction3BAA72D1
 └─ [~] Runtime
     ├─ [-] nodejs22.x
     └─ [+] nodejs18.x


✨  Number of stacks with differences: 1

LATEST とはありますが現時点では最新の Node.js 22 は指定されないので注意が必要です。

おわりに

Lambda 関数のランタイムで Node.js 22 が利用可能になったので AWS CDK で設定してみました。

Node.js の公式リリーススケジュールを見ると Node.js 20 はもうじきメンテナンスモードになるようです。
https://nodejs.org/en/about/previous-releases#release-schedule

ランタイムのアップデートは計画的に行うようにしましょう。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.